package modelo;
/**
 * Clase abstracta que modela un objeto destructible, esto es, un objeto que luego de recibir una cierta cantidad de disparos es destruido.
 * @author Francisco Barreneche
 *
 */
public abstract class Destructible extends Obstaculo{
	
	protected Premio premio;
	protected int indice_destruc;
	
	/**
	 * Constructor que es utilizado para inicializar los atributos desde las clases derivadas de Destructible
	 * @param c La celda en la que esta ubicado el objeto destructible
	 * @param indice 
	 */
	public Destructible(Celda c, int indice) {
		super(c);
		this.indice_destruc = indice;
		this.premio = null;
	}
	
	/**
	 * Getter para el atributo indice_destruc
	 * @return Retorna un numero entero que representa el indice de destruccion del objeto destructible, esto es, la cantidad de disparos que hacen falta para que sea destruido
	 */
	public int obtenerIndiceDestruct() {
		return this.indice_destruc;
	}
	
	/**
	 * Getter para el atributo premio
	 * @return Retorna nulo si el objeto destructible no tiene un premio dentro, y devuelve el premio en cuestion en caso de tenerlo 
	 */
	public Premio obtenerPremio() {
		return this.premio;
	}
	
	/**
	 * Setter para el atributo premio
	 * @param p El premio que se quiere poner dentro del ojeto destructible
	 */
	public void establecerPremio(Premio p) {
		this.premio = p;
	}
	
	/**
	 * Metodo que indica el comportamiento del objeto destructible al recibir un disparo, disminuyendo su indice de destructibilidad en caso de que sea mayor que cero, y quitando al objeto
	 * de la celda en caso de que su indice destructibilidad haya llegado a cero. Y en este ultimo caso, poner el premio (en caso de poseer uno) en la celda.
	 */
	public void recibirDisparo() {
		indice_destruc --;
		if(indice_destruc<=0) {
			this.celda.quitarObstaculo();
			if(this.premio!=null) this.celda.ponerPremio(this.premio);
		}
		System.out.println("Se Recibio disparo en: "+this.celda.obtenerX()+", "+this.celda.obtenerY()+" - "+ "Indice: "+this.indice_destruc);
	}
}
